home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 102 / examples / c_tips.doc next >
Text File  |  1987-01-25  |  12KB  |  341 lines

  1. QUESTION: Is GDOS easy to use?.....ANS...Only if you have docs. & a C compiler!
  2.  
  3. FACILITIES:520 ST mono  vs.  1040 ST color
  4.             TOS in ROM  vs.  TOS in RAM
  5.             lowres vs. medres vs. hires
  6.                 *.PRG  vs.  *.TOS
  7.    no GDOS     vs. GEMVDI vers.0.X      vs. ATARI GDOS vers.1.1 RESIDENT
  8.  
  9. PLAN: Copy and install several test cases of the ATARI TOS usage interface from
  10. both MWC and GEM/GDOS documentation. Establish a useful multi-mode text process
  11. for use in Mark Williams C. Do not compare just compilers but learn C in ATARI.
  12. 0.0 Binary formats - header of GEM executable code:
  13.     ( note in ST HACKER - Feb'87 - W. Rostek - p.212 - figure 1 )
  14.     601A header:           601A   in hex             16 bits
  15.                            test segment length       32 bits (in hex bytes)
  16.                            data segment length       32 bits      "
  17.                            bss  segment length       32 bits      "
  18.                            symbol table length       32 bits      "
  19.                            0       -         0       32 bits
  20.                            start address in text seg 32 bits
  21.                            relocation flag(0,#,ffff) 16 bits
  22.                            start of text:            /* at byte #1c */
  23.  
  24.      n.out header (MWC-68000 format):
  25.                            struct ldheader {
  26.                                   short  l_magic;            /* 701a         */
  27.                                   short  l_flag;             /*              */
  28.                                   short  l_machine;          /*              */
  29.                                   short  l_tbase;            /*              */
  30.                                   size_t l_ssize[NLSEG];     /* 9 longs      */
  31.                                   long   l_entry;
  32.                            };                    /* format used in *.o files */
  33.                                                 /* start of text at byte #30 */
  34.  
  35. 1.0 "Mark Williams C / ATARI-ST"  Mark Williams Co.1986
  36.     The program linedemo.tos is copied from the ATARI Explorer dec'86 and is
  37. supplied to illustrate MWC explicitly.
  38.  
  39. 2.0 "Programmer's Guide to GEM" Balma,Fitler SYBEX 1986
  40.     The control programs ctrl_ndc.c ( page 157,listing 3.1 ) and ctrl_rc.c(page
  41.  158,listing3.2) are basic calling routines, as provided here converted to MWC.
  42.  
  43. 3.0 Examples versus subroutines:
  44.  
  45. Make stand-alone examples, i.e. EXSHIFT.TOS to demonstrate a give facility.
  46. This then corresponds to the subroutine:  shift( # )      .  And so forth......
  47.  
  48. 4.0 Verify operations under TOS with or without GDOS:
  49.  
  50. Test Examples provided for Mark Williams C - 15 Jan'87 - CJPurcell
  51. Cases as tested in lowrez,medrez,and hirez without(not)GDOS or 0.x or1.1 GDOS
  52.  
  53. Choices:        Lowrez                  Medrez                  Hirez
  54.             PRG         TOS         PRG         TOS         PRG         TOS
  55.   GDOS- not,0.x,1.1;not,0.x,1.1;not,0.x,1.1;not,0.x,1.1;not,0.x,1.1;not,0.x,1.1
  56.  cases:
  57. EXBCONIN     MWC program - all cases ok.
  58. EXCCONWS     MWC program - all cases ok.
  59. EXLINEAC     MWC program - .PRG cases ok after ref.code changes as noted. TOS??
  60. EXSHIFT      MWC program- ALL CASES OK.
  61. EXTIMDAT     MWC program- all cases ok.
  62. RECURSE     .TTP  - all cases ok.
  63. RECURSEP    .TTP  - all cases ok.
  64. ST_ALARM : ACCESSORY  If clock set:  ok and consistant except under  GDOS 0.x
  65.  drivers:
  66. Use CTRLNDC.C and CTRLRC.C to build test examples for GEM(Consider CTRLMETA.C)
  67. LADYBUG1    GEM program - all cases ok.
  68. LADYBUG2    GEM program - all cases good.
  69. LINEDEMO    GEM program - all cases good.
  70. (below: * compile with -VGEM option under MWC *  all cases without GDOS fail *)
  71. LINEWALK    GEM program                -VGEM
  72.  almost worked in GDOS 1.1 in mono-except the system crashed at conclusion.
  73.  The case in color of LINEWALK.PRG under GDOS v.1.1 worked just fine.
  74. TEXTALGN    GEM program                -VGEM   ok with GDOS fix req'd for color
  75. TEXTEFCT    GEM program                -VGEM  same w/color fix. Fails in .TOS
  76. TEXTSWIS    GEM program                -VGEM  same w/color fix. Fails in .TOS
  77.  
  78.  
  79. GETENV (code to provide interface to microCshell from code generated by MWC)
  80.  
  81. 5.0 Basic operations in the microshell  MSH.PRG  of MarkWilliams C :
  82.  
  83.     bang ops:  !operator  or  ?operator       have ranges:
  84.     -10   history  -1  0  1 - - - - - n   where history as is estab.in profile
  85.                                           and n corresponds to the n-th set var
  86.  
  87.     dot ops:   correspond to *.BAT files of other systems  i.e.  . profile
  88.                                                         a crucial ^ in-fix char
  89.  
  90.     set environment in . profile or autoload file profile on entry to MSH.PRG
  91.     some newly provided options:
  92.     EDITOR:  useful for installation of LESS.PRG
  93.     LESS  :  options
  94.     SSDISK:  for single sided disk operations
  95.     BINDRIVE :   single sided disk applications, as well
  96.  
  97.     cc options (undocumented in manual as supplied):
  98.     V.1.0.4 ; -VSRTVC, -VDLINE, -VDTYPE, -VDSYMB, -VKEEP, -VPEEP, -VROM, -VPROF
  99.               -VALIEN  and I'm told in V.1.1 that  -VGEMACC, -VGEMAPP   exist.
  100.     I can perform -VGEMACC manually, but what is the function of -VGEMAPP ?
  101.  
  102.     help operations - are facilitated by keyclick  HELP.TTP   then enter  -R  .
  103.                       This operation serves to re-establish the HELPFILE index.
  104.  
  105. *****************selected items as paragraphs for tutorial*********************
  106. source listing of exctime.c :
  107.  
  108. cc.prg:
  109.  
  110. #include <types.h>
  111. main()
  112. {
  113.        extern char *ctime();
  114.        time_t t;
  115.        time(&t);
  116.        printf(ctime(&t));
  117. }
  118.  
  119.  
  120. typical verbose compiler messages from MWC  for:       exctime.c
  121.  
  122. Mark Williams C for the Atari ST, Version 1.0.4
  123. Copyright 1984-1986, Mark Williams Co., Chicago.
  124. b:\lib\cpp.prg -o f:\cc12988a exctime.c
  125. a:\lib\cc0.prg D23400000000 f:\cc12988a f:\cc12988b
  126. a:\lib\cc1.prg D23400000000 f:\cc12988b f:\cc12988a
  127. a:\lib\cc2.prg D23400000000 f:\cc12988a exctime.o f:\cc12988b
  128. 1 label deleted
  129. rm f:\cc12988a
  130. rm f:\cc12988b
  131. a:\bin\ld.prg -X -d -r a:\lib\crts0.o exctime.o b:\lib\libc.a
  132. Ld: file b:\lib\libc.a: outdated ranlib
  133. a:\lib\gemfix.prg l.out exctime.prg
  134. rm l.out
  135. rm exctime.o
  136.  
  137. *******************************************************************************
  138.  
  139. C compiling:
  140. typical declaration conventions used in generic C :
  141.  
  142. prefix                   suffix
  143. {           body                       begin opening   (compound statement)
  144.                             }          end closure
  145.  
  146.   &variable_name                       yields the address of the variable
  147.         *name                          indicates a pointer
  148.         name()                         indicates a function
  149.         name[]                         indicates an array
  150.  
  151.  
  152.  
  153. POINTERS:
  154. case:
  155.  
  156.     typedef char *STRING
  157.            is an identifier for pointers to char ; then
  158.  
  159. STRING name, sign;
  160.  
  161.            means
  162.    char *name, *sign;
  163.  
  164.  
  165. STRUCTURE declaration:
  166.  
  167.    struct book libry;           IS SHORT FOR:
  168.                                      ___________________________optional tag_
  169.           _________                 /
  170.          /                 struct book {
  171.         /                     char title[MAXTIT];
  172. TEMPLATE                      char author[MAXAUT];
  173.         \                     float value;
  174.          \_________        }  libry;
  175.                                 \___________________Variable name to template_
  176.  
  177.  
  178. PD - private data - made public:
  179.  
  180. *******************************************************************************
  181.  
  182. GEM prologs for C programs:
  183.  
  184. crts0.o :
  185.           U main_
  186. 00000110 PD errno_
  187.           U _stksize_
  188.           U _cmdname_
  189.           U exit_
  190.           U dup2_
  191. 00000112 PD environ_
  192.           U dup_
  193.           U _iovector_
  194.  
  195. crtsg.o :              = crtsggem.o
  196.           U main_
  197. 00000054 PD errno_
  198.           U _stksize_
  199.           U exit_
  200. 00000056 PD environ_
  201. 00000000 SI _start_
  202.  
  203.  
  204. crtsg.o(mod) :    = crtsgacc.o      (= crstd.o  in vers. 1.1 of MWC)
  205. 00000000 SI _start_
  206.           U main_
  207. 00000010 bd ustack
  208. 00000000 si start
  209. 00000810 bd estack
  210.  
  211. crystal.o :
  212.  
  213. 00000000 PI crystal
  214. 0000000C PD ctrl_cn
  215.  
  216.  
  217. also see source codes crts0.s , crtsg.s  ,  crystal.s   and crtsgacc.s.
  218.  
  219. *******************************************************************************
  220.  
  221. LIBRARY FILES:
  222. MWC:   libaes.a , libm.a , libc.a , libvdi.a ( as supplied from MW-newdated- )
  223. DRI(used DRTOMW) libf.a , libgem.a        ( all on tan msh-support disk-10/27)
  224.           libvdibi.a , libaesbi.a , libpan.a     ( all newdated )
  225. typically -laes   etc  will find the guy  b:\lib\libaes.a             etc.
  226.  
  227.  
  228.  
  229. *******************************************************************************
  230.  
  231. Comparisons of TOS connective tissue between DRI and MWC.
  232. DRI:
  233. struct _iobuf
  234.     {
  235.     int _fd;            /* file descriptor for low level io */
  236.     int _flag;          /* stream info flags                */
  237.     char *_base;        /* base of buffer                   */
  238.     char *_ptr;         /* current r/w pointer              */
  239.     int _cnt;           /* # chars to be read/have been wrt */
  240.     };
  241. extern struct _iobuf _iob[MAXFILES];   /* an array of this info */
  242. #define FILE struct _iobuf      /* stream definition            */
  243.  
  244. symbol table from awstart.o ( used drtomw.prg format )
  245.  
  246.           U main_
  247. 0000003E SI crystal_
  248. 000000A4 PD ctrl_cn_
  249. 0000004A SI lnainit_
  250. 00000066 SI lnappix_
  251. 0000060C bd ustk
  252. 00000008  a intinp
  253. 0000000C  a ptsinp
  254. 00000020  a lstlin
  255. 00000200 bd savea0
  256. 00000208 bd basea0
  257. 00000204 bd savea1
  258.  
  259.  
  260. MWC:
  261. typedef struct  FILE {
  262.         unsigned char   *_cp,           /* current character ptr */
  263.                         *_dp,           /* ptr to start of data in buffer */
  264.                         *_bp;           /* buffer pointer */
  265.         int     _cc;                    /* character count */
  266.         int     (*_gt)(),               /* getc function */
  267.                 (*_pt)();               /* putc function */
  268.         char    _ff;                    /* flags; see below */
  269.         char    _fd;                    /* file descriptor (reqd by reopen) */
  270.         int     _uc;                    /* ungot char */
  271. }       FILE;
  272.  
  273. symbol table from crts0.o
  274.  
  275.           U main_
  276. 00000110 PD errno_
  277.           U _stksize_
  278.           U _cmdname_
  279.           U exit_
  280.           U dup2_
  281. 00000112 PD environ_
  282.           U dup_
  283.           U _iovector_
  284. 00000000 SI _start_
  285.  
  286.  
  287. PROFILE     my busy version of . profile   for use in initializing  MSH.PRG :
  288.  
  289. set drive1=a:
  290. set drive2=b:
  291. set drive4=f:
  292. setenv PATH=.bin,,$drive1\bin,$drive2,$drive2\bin
  293. setenv SUFF=,.prg,.tos,.ttp,.app
  294. setenv LIBPATH=$drive1\lib,$drive2\lib
  295. setenv TMPDIR=$drive4
  296. setenv INCDIR=$drive2\include
  297. setenv TIMEZONE=CST:0
  298. setenv LESS=-pm
  299. setenv EDITOR=editor.ttp
  300. set prompt='>> '
  301. set history=10
  302. set a='ddir a:'
  303. set b='ddir b:'
  304. set c='cc -V'
  305. set cg='cc -V -VGEM'
  306. set d='dumpa s'
  307. set e='editor'
  308. set h='set in history'
  309. set l='list'
  310. set m='less -m'
  311. set n='nm -ap'
  312. set o='help overview'
  313. set p='dirb'
  314. set q='. exit_mwc'
  315. set r='ar tv'
  316. set s='stty003.ttp'
  317. set t='b:\less.txt'
  318. set u='list b:\usage.txt'
  319. set x='b:\me_mwc.ttp'
  320. set z='as -l'
  321. blufont
  322. echo ' mshell.tos  <Mark Williams microShell>   <LOGIKRON colortlk.prg>       '
  323. echo ' welcome Charles Purcell ;         ;  - 321K FASTRM12.PRG installed -   '
  324. echo '                                                                        '
  325. echo ' !bang ops?!a-ddir-b !c cc-V  !d dumpa   !e editor !h hist. !g cc-V-VGEM'
  326. echo ' !l list !m less -m !n nm -ap !o overview  !p dirb  !q . quit = . script'
  327. echo ' !r ar tv(b:\lib\) !s stty003 !t b:\less.txt !u help !x me_mwc !z as -l '
  328. echo '                              !v listing pr  !w it out >prn             '
  329. echo ' !m less>more, but, more>list !l       try  !m !t  for demonstration    '
  330. echo '                                                                        '
  331. echo ' ***microshell files***                                                 '
  332. echo *.c
  333. echo *.prg
  334. echo *.tos
  335. echo *.txt
  336. echo b:\*.txt
  337. date
  338. echo ' ***system freespace***                                                 '
  339. mf
  340. df -a
  341.